<?

/**
*Form for editing ippbx settings
* @return $form object
*/
function ippbx_settings_form($form_state) {
	global $user;

	$fax = ippbx_user_get_fax( $user->uid );
	$voice = ippbx_user_get_voice ( $user->uid );
	$internal = ippbx_user_get_internal( $user->uid );

	$form['#theme'] = 'ippbx_user_settings';
	$form['#validator'] = array('ippbx_settings_form_validate');
	
	$form['external'] = '';
	
	$form['internal'] = array();
	
	for ( $i = 0; $i < count($internal); $i++) {
		$form['internal'][$i] = array(
			"{$i}Short_Number" => array('#type' => 'textfield', '#default_value' => $internal[$i]['Short_Number'], '#size' => 2, '#maxlength' => 1 ),
			"{$i}NameNumber" => array('#type' => 'textfield', '#default_value' => $internal[$i]['NameNumber'], '#size' => 15, '#maxlength' => 25 ),
			"{$i}Login" => array('#type' => 'textfield', '#default_value' => $internal[$i]['Login'], '#size' => 15, '#maxlength' => 15),
			"{$i}Password" => array('#type' => 'checkbox', '#default_value' => ''),
		);
	}
	
	$form['fax'] = array(
		'#type' => 'fieldset',
		'#title' => t('Настройки факса'),
		'#collapsible' => TRUE,
	);
	
	$form['fax']['fax'] = array(
		'#type' => 'textfield',
		'#title' => t('Короткий номер факса'),
		'#default_value' => $fax['Short_Number'],
		'#size' => 2,
		'#maxlength' => 1,
	);

	$form['voice'] = array(
		'#type' => 'fieldset',
		'#title' => t('Настройки голосовой почты'),
		'#collapsible' => TRUE,
	);
	
	$form['voice']['voice'] = array(
		'#type' => 'textfield',
		'#title' => t('Короткий номер голосовой почты'),
		'#default_value' => $voice['Short_Number'],
		'#size' => 2,
		'#maxlength' => 1,
	);
	
	$form['submit'] = array(
		'#type' => 'submit', 
		'#value' => t('Сохранить'),
		'#weight' => 50,
	);
	
	return $form;
}

/**
* hook_validate()
* Custom validator for ippbx_setting form
* checked input data
*/
function ippbx_settings_form_validate($form, &$form_state) {
	
	for ( $i = 0; $i < 3; $i++ ) {
		if ( $form_state['values']["{$i}Login"] == NULL) {
			form_set_error("{$i}Login", t('Логин для внутреннего номера, должен быть установлен.'));
		}
		
		if ($form_state['values']["{$i}Short_Number"] != NULL && !preg_match( "/[0-9]/i", $form_state['values']["{$i}Short_Number"]) ) {
			form_set_error("{$i}Short_Number", t('Короткий номер, должен состоять из цифр.'));
		}
		
		$form_state['values']["{$i}NameNumber"] = check_plain($form_state['values']["{$i}NameNumber"]);
	}
	
	for ( $i = 0; $i < 3; $i++ ) {
		for ( $j = $i+1; $j < 3; $j++) {
			if ($form_state['values']["{$i}Short_Number"] == $form_state['values']["{$j}Short_Number"] && $form_state['values']["{$j}Short_Number"] != NULL) {
				form_set_error("{$i}Short_Number", t('Короткие номера не должны совпадать.'));
			}
			
			if ($form_state['values']["{$i}Login"] == $form_state['values']["{$j}Login"] && $form_state['values']["{$j}Login"] != NULL) {
				form_set_error("{$i}Login", t('Логины не должны повторяться.'));
			}
		}
	}
	
	if ( $form_state['values']['fax'] == NULL ) {
		form_set_error('fax', t('Короткий номер факса, дожен быть введен.'));
	} else {
		if ( !preg_match( "/[0-9]/i", $form_state['values']['fax']) ) {
			form_set_error('fax', t('Короткий номер факса, дожен состоять из цифр.'));
		}
		for ( $i = 0; $i < 3; $i++ ) {
			if ($form_state['values']['fax'] == $form_state['values']["{$i}Short_Number"]) {
				form_set_error('fax', t('Короткие номера не должны совпадать.'));
			}
		}
	}
	
	if ( $form_state['values']['voice'] == NULL ) {
		form_set_error('voice', t('Короткий номер голосовой почты, дожен быть введен.'));
	} else {
		if ( !preg_match( "/[0-9]/i", $form_state['values']['voice']) ) {
			form_set_error('voice', t('Короткий номер голосовой почты, дожен состоять из цифр.'));
		}
		for ( $i = 0; $i < 3; $i++ ) {
			if ($form_state['values']['voice'] == $form_state['values']["{$i}Short_Number"]) {
				form_set_error('voice', t('Короткие номера не должны совпадать.'));
			}
		}
	}
	
	if ($form_state['values']['voice'] == $form_state['values']['fax']) {
		form_set_error('voice', t('Короткие номера не должны совпадать.'));
	}
}

/**
* hook_sumit()
* Custom submission for ippbx_setting_form,
* save ippbx data
*/
function ippbx_settings_form_submit($form, &$form_state) {
	global $user;
	
	$internal = ippbx_user_get_internal($user->uid);
	
	ippbx_set_db();
	//fax
	db_query('UPDATE FaxNumbers SET Short_Number=%d WHERE ID_User=%d', $form_state['values']['fax'], $user->uid);
	//voice
	db_query('UPDATE VoiceNumbers SET Short_Number=%d WHERE ID_User=%d', $form_state['values']['voice'], $user->uid);
	
	//internal numbers save
	for ( $i = 0; $i < 3; $i++) {		
		if ( $form_state['values']["{$i}Password"] == 1) {
			db_query('UPDATE InternalNumbers SET Short_Number=%d, NameNumber=\'%s\', Login=\'%s\', Password=\'%s\' WHERE Number=%d AND ID_User=%d',$form_state['values']["{$i}Short_Number"], $form_state['values']["{$i}NameNumber"], $form_state['values']["{$i}Login"], user_password(), $internal[$i]['Number'], $user->uid);
		} else {
			db_query('UPDATE InternalNumbers SET Short_Number=%d, NameNumber=\'%s\', Login=\'%s\' WHERE Number=%d AND ID_User=%d',$form_state['values']["{$i}Short_Number"], $form_state['values']["{$i}NameNumber"], $form_state['values']["{$i}Login"], $internal[$i]['Number'], $user->uid);
		}
	}

	ippbx_unset_db();
	drupal_set_message('Настройки сохранены!');
}

/**
*This menu function get ippbx use info from ippbx database, and
*output themed data
* @return themed object
*/
function ippbx_user_info() {
	global $user;
	$external = ippbx_user_get_external( $user->uid );
	$internal = ippbx_user_get_internal( $user->uid );
	$fax = ippbx_user_get_fax( $user->uid );
	$voice = ippbx_user_get_voice( $user->uid );
	$profile = ippbx_user_get_profile_data( $user->uid );
	return theme('ippbx_user_info', $external[0], $external[1], $internal, $fax, $voice, $profile);
}

function ippbx_user_get_profile_data( $uid ) {
	ippbx_set_db();
	$data = array();
	$UserType = db_result( db_query('SELECT UserType FROM UserProfile WHERE ID_User=%d', $uid ) );
	
	if ($UserType == 0) {
		$table = 'UserIndividual';
		$data['UserType'] = t('Физическое лицо');
	} else {
		$table = 'UserLegal';
		$data['UserType'] = t('Юридическое лицо');
	}
	
	$data += db_fetch_array( db_query('SELECT * FROM %s WHERE ID_User=%d', $table, $uid) );

	ippbx_unset_db();
	
	if ($UserType == 0) {
		$formated_data = array(
			t('Форма регистрации: ') => $data['UserType'],
			t('Ф.И.О: ') => $data['FIO'],
			t('Серия паспорта: ') => $data['PassportSeries'],
			t('Номер паспорта: ') => $data['PassportNumber'],
			t('Дата выдачи паспорта: ') => $data['PassportDate'],
			t('Кем выдан паспорт: ') => $data['PassportOtdel'],
			t('Адрес прописки: ') => $data['Address'],
		);
	} else {
		$formated_data = array(
			t('Форма регистрации: ') => $data['UserType'],
			t('Название фирмы: ') => $data['FirmName'],
			t('Ф.И.О. руководителя: ') => $data['FIO'],
			t('ИНН: ') => $data['INN'],
			t('ОКПО: ') => $data['OKPO'],
			t('КПП: ') => $data['KPP'],
			t('Корреспондентский счет: ') => $data['KC'],
			t('Расчетный счет: ') => $data['PC'],
		);
	}
	
	return $formated_data;
}

/**
*Themed form ippbx_user_settings
* @return $output An html of this form
*/
function theme_ippbx_user_settings($form) {
	global $user;
	drupal_add_js('misc/collapse.js');

	$internal = ippbx_user_get_internal( $user->uid );
	
	$output = '';
	
	if (is_array($form['external'])) {
		$output .= drupal_render($form['external']);
	}
	
	$headers = array( t('Номер'), t('Короткий номер'), t('Описание'), t('Логин'), t('Пароль') );
	
	$row = array();
	for ($i = 0; $i < 3; $i++) {
		$row[$i][0] = $internal[$i]['Number'];
		$row[$i][1] = drupal_render($form['internal'][$i]["{$i}Short_Number"]);
		$row[$i][2] = drupal_render($form['internal'][$i]["{$i}NameNumber"]);
		$row[$i][3] = drupal_render($form['internal'][$i]["{$i}Login"]);
		$row[$i][4] = drupal_render($form['internal'][$i]["{$i}Password"]);
	}
	
	$output .= '<fieldset class=" collapsible"><legend>'.t('Настройка внутренних номеров').'</legend>';
	$output .= theme('table', $headers, $row , array('style' => 'width: 100%;') ).'</fieldset>';
	$output .= drupal_render($form['fax']);
	$output .= drupal_render($form['voice']);
	$output .= drupal_render($form);
	return $output;
}
?>